#ifndef __HEMISPHERICAL_GRID_H__
#define __HEMISPHERICAL_GRID_H__

#include "grid.h"
#include "math/vector.h"

#include <boost/serialization/nvp.hpp>
#include <boost/serialization/version.hpp>

#include <cmath>

namespace Sirat {

namespace Common {

class Hemispherical_Grid : public Grid {
public:
	Hemispherical_Grid(const unsigned short,const unsigned short,const Math::Vector&,const Math::Vector&,const Math::Vector&,const Math::Vector&);
	Hemispherical_Grid(void);
	Hemispherical_Grid(const Hemispherical_Grid& _hemispherical_grid);
	~Hemispherical_Grid(void);
	
	virtual Math::Vector projection_transformation(unsigned int x,unsigned int y);
	Grid* clone();
	
	Hemispherical_Grid& operator=(const Hemispherical_Grid& _hemispherical_grid);
	
private:
	friend class boost::serialization::access;
	template<class Archive> void serialize(Archive&, const unsigned int);
};

template<class Archive> void Hemispherical_Grid::serialize(Archive& ar, const unsigned int /* file_version */){
	ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Grid);
}

}

}

#endif
